package 笔试.华为笔试.第一题;

import java.util.Scanner;

//第一题：
//输入一行32位的无符号整数数组，不定长，用空格分隔，要求对它们做“加密”：
//步骤A：交换：对于每个整数，按二进制每两位交换，第一位和第二位换，第三和第四换，以此类推。如0010，交换成0001。
//步骤B：循环右移：对于每个整数，按二进制右移两位，右移出来的最低2位放到下一个数的最高2位，以此类推。
// 最后一个数的最低2位安到第一个数的最高2位。如果只有一个数，则右移后的最低两位放到自己的最高位。
//输出“加密”后的数。
//示例：输入1 2，输出1073747824  2147483648
public class Main
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine().trim();
        String[] strs = str.split(" ");
        int[] nums=new int[strs.length];
        for (int i = 0; i < nums.length; i++)
        {
            nums[i]=Integer.parseInt(strs[i]);
        }
        int[][] res=new int[nums.length][32];
        for (int i = 0; i < nums.length; i++)
        {
            for (int j = 31; j >=0 ; j--)
            {
                res[i][j]=nums[i]&1;
                nums[i]>>=1;
            }
        }
        for (int i = 0; i < nums.length; i++)//A步骤
        {
            for (int j = 0; j < 32; j+=2)
            {
                int temp=res[i][j];
                res[i][j]=res[i][j+1];
                res[i][j+1]=temp;
            }
        }
        int temp1=res[nums.length-1][31];
        int temp2=res[nums.length-1][30];//最后要移动到前面的两位
        for (int i = nums.length-1; i >=0 ; i--)
        {
            if (i!=nums.length-1)
            {
                res[i+1][1]=res[i][31];//跨数组的右移
                res[i+1][0]=res[i][30];
            }
            for (int j = 29; j >=0 ; j--)//因为是右移，左面的会覆盖右面的数字，所以不能从前往后遍历，需要从后往前遍历
            {
                res[i][j+2]=res[i][j];
            }
        }
        res[0][1]=temp1;//把最后的两位数加到最前面
        res[0][0]=temp2;
        for (int i = 0; i < nums.length; i++)
        {
            long res1=0;
            int index=0;
            for (int j = 31; j >=0; j--)
            {
                res1+=res[i][j]*Math.pow(2,index++);//变成int类型
            }
            if (i==nums.length-1) System.out.println(res1);//最后一个数后面不加空格
            else System.out.println(res1+" ");
        }
    }
}
